<?php
/*权限验证类*/
	namespace KJ;
	use Application\Admin\Model\User;
	use Application\Admin\Model\Auth as AuthModel;
	class Auth{
		
		private $userAuth;
		
		public function __construct(){
			
			/*创建user、Auth表的实例用来操作数据库中的数据*/
			$user = new User();
			$Auth = new AuthModel();
			
			/*获取登录时写入数据的$_SESSION['loginName']*/
			$loginName = $_SESSION['loginName'];  
			  
			/*获取user表中username = '$loginName的aid的字段并赋值给$aid*/
			$aid = $user->where("username = '$loginName'")->field('aid')->select();
			
			/*explode() 函数把字符串打散为数组
			 * explode(separator,string,limit)
			 * separator规定在哪里分割字符串
			 * string要分割的字符串
			 * limit可选,规定所返回的数组元素的数目*/			
			$userauth = explode(',' , $aid[0]['aid']);
//			array(1,3);
//			array[0] = 1  array[1] =3

			/*获取auth表中的所有数据*/
			$auth = $Auth->field('id,value')->select();
//			array(
//				array(
//					'id' => 1,
//					'value' => 'admin/index/index'
//				),
//				array(
//					'id' => 2,
//					'value' => 'admin/article/index'
//				),
//				.....
//			)

			/*将auth表中的所有数据处理为一维关联数组*/
			$arrAuth = array();
			foreach($auth as $k => $v){
				$arrAuth[$v['id']] = $v['value'];
			}			
//			array(
//				'1' => 'admin/index/index',
//				'2' => 'admin/article/index',
//				...
//				...
//			)
//			var_dump($arrAuth);exit;

			/*将一维关联数组处理为索引数组*/
			foreach($userauth as $v){
				@$userAuth[] = $arrAuth[$v];
			}
//			array('admin/index/index','admin/article/index',...)

			/*将索引数组写入私有属性$userAuth*/
			$this->userAuth = $userAuth;
		}

		public function check(){						
//			var_dump($this->userAuth);

			/*字符串拼接路径写入$requestUrl*/
			$requestUrl = MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME;
			$requestUrl = strtolower($requestUrl);	/*strtolower() 函数把字符串转换为小写*/
//			var_dump($requestUrl);
//			var_dump($this->userAuth);exit;
			
			/*in_array() 函数搜索数组中是否存在指定的值
			 * 判断strtolower(MODULE_NAME)在不在配置信息$app -> config['VALIDATE_MODULE']中
			 * 在属性中则返回TRUE
			 * 不再属性中则返回FALSE */
			if(in_array(strtolower(MODULE_NAME), KJ :: $app -> config['VALIDATE_MODULE'])){
				
				/*从配置信息中取出允许访问的路径信息写入$allowList*/
				$allowList = KJ :: $app ->config['ALLOW_ACCESS_LIST'];
				
				/*判断$requestUrl的值（权限路径）是否在$allowList中
				 * 或者登陆人$_SESSION['loginName']是不是超级管理员SUPER_ADMIN
				 * 只要满足一个条件就返回TRUE*/
				if(in_array($requestUrl, $allowList) || in_array($_SESSION['loginName'], KJ :: $app -> config['SUPER_ADMIN'])){
					return TRUE;
				}
				
				/*判断$requestUrl的值（权限路径）是否在$userAuth属性中
				 * 在属性中则返回TRUE
				 * 不再属性中则返回FALSE*/
				if(!in_array($requestUrl, $this->userAuth)){
					return FALSE;
				}else{
					return TRUE;
				}
				
			}
			/*返回TRUE则代表有权访问*/
			return TRUE;
		}
		
	}
?>